﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ASPPanificadora.controller;
using ASPPanificadora.classes;
using ASPPanificadora.Funcoes;

namespace ASPPanificadora.Telas
{
    public partial class UsuarioView : System.Web.UI.Page
    {
        UsuarioController usuarioController;
        FuncionarioController funcionarioController;
        IList<Funcionario> funcionario;
        TipoUsuarioController tipoUsuarioController;
        IList<TipoUsuario> tipoUsuario;
        SerialSistemaController serialSistemaController;
        Usuario usuario;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["TipoUsuario"] == null || !ControleAcessoTela.ConfirmaAcessoTela("UsuarioView", Session["TipoUsuario"]))
                Response.Redirect("~/Default.aspx");


            ((SiteCadastro)Page.Master).btnSalvar.Click += new EventHandler(Salvar);
            ((SiteCadastro)Page.Master).btnPesquisa.Click += new EventHandler(Pesquisar);
            ((SiteCadastro)Page.Master).btnLimpar.Click += new EventHandler(LimparCampos);

            if (!IsPostBack)
            {
                funcionarioController = new FuncionarioController();
                funcionario = funcionarioController.Recuperar();

                ddlFuncionarios.Items.Add(new ListItem("Selecione", "0"));

                foreach (Funcionario funcionarios in funcionario)
                {
                    ddlFuncionarios.Items.Add(new ListItem(funcionarios.NomeFuncionario, funcionarios.Id.ToString()));
                }

                tipoUsuarioController = new TipoUsuarioController();
                tipoUsuario = tipoUsuarioController.Recuperar();

                ddlTipoUsuarios.Items.Add(new ListItem("Selecione", "0"));

                foreach (TipoUsuario tipoUsuarios in tipoUsuario)
                {
                    ddlTipoUsuarios.Items.Add(new ListItem(tipoUsuarios.NomeTipoUsuario, tipoUsuarios.Id.ToString()));
                }               


                serialSistemaController = new SerialSistemaController();
                txtSeriais.Text = serialSistemaController.SeriaisDisponiveis().ToString();
            }

        }

        protected void ExibeMensagem(string msg)
        {
            ((SiteCadastro)Page.Master).txtResultado.Text = msg;
        }

        protected void Salvar(object sender, EventArgs e)
        {
            if (!txtCodigo.Text.Equals("0") || ValidaSerial())
            {
                if (!ValidaLogin())
                {

                    string msg = "";
                    try
                    {
                        usuario = new Usuario();
                        usuario.Id = Convert.ToInt32(txtCodigo.Text);
                        usuario.Login = txtLogin.Text;
                        usuario.IdFuncionario = Int32.Parse(ddlFuncionarios.SelectedValue);
                        usuario.IdTipoUsuario = Int32.Parse(ddlTipoUsuarios.SelectedValue);

                        usuarioController = new UsuarioController();
                        serialSistemaController = new SerialSistemaController();
                        msg = usuarioController.Salvar(usuario);
                        txtSeriais.Text = serialSistemaController.SeriaisDisponiveis().ToString();
                        txtCodigo.Text = usuario.Id.ToString();
                    }
                    catch (Exception ex)
                    {
                        msg = "Erro: " + ex.Message.ToString();
                    }
                    finally
                    {
                        ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text = null;
                        ExibeMensagem(msg);
                    } 
                }
                else
                    ExibeMensagem("Login já está cadastrado");
            }
            else
                ExibeMensagem("Não há seriais disponíveis");
        }

        protected void Pesquisar(object sender, EventArgs e)
        {
            if (ValidaCamposPesquisa())
                LimparCampos(sender, e);
            else
            {
                try
                {
                    usuarioController = new UsuarioController();
                    int id = Convert.ToInt32(((SiteCadastro)Page.Master).txtPesquisaCodigo.Text);
                    usuario = new Usuario();
                    usuario = usuarioController.PesquisarPorId(id);
                    if (usuario == null)
                        LimparCampos(sender, e);
                    else
                    {
                        RedefinirCampos();
                    }
                }
                catch (Exception ex)
                {
                    LimparCampos(sender, e);
                }
            }
        }

        protected void LimparCampos(object sender, EventArgs e)
        {
            ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text = null;
            ((SiteCadastro)Page.Master).txtResultado.Text = null;
            txtCodigo.Text = "0";
            txtLogin.Text = null;
            ddlFuncionarios.SelectedIndex = 0;
        }

        private bool ValidaLogin()
        {
            usuarioController = new UsuarioController();
            return usuarioController.PesquisarPorNome(txtLogin.Text, Convert.ToInt32(txtCodigo.Text));
        }

        private bool ValidaSerial()
        {
            serialSistemaController = new SerialSistemaController();
            if (serialSistemaController.SeriaisDisponiveis() > 0)
                return true;
            else
                return false;
        }

        private bool ValidaCamposPesquisa()
        {
            if (((SiteCadastro)Page.Master).txtPesquisaCodigo == null || ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text.Equals("") || ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text.Equals("0"))
                return true;
            else
                return false;
        }

        private void RedefinirCampos()
        {
            ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text = null;
            ((SiteCadastro)Page.Master).txtResultado.Text = null;
            txtCodigo.Text = usuario.Id.ToString();
            txtLogin.Text = usuario.Login.ToString();
            ddlFuncionarios.SelectedValue = usuario.IdFuncionario.ToString();
            ddlTipoUsuarios.SelectedValue = usuario.IdTipoUsuario.ToString();

            serialSistemaController = new SerialSistemaController();
            txtSeriais.Text = Convert.ToString(serialSistemaController.SeriaisDisponiveis() + 1);
        }
    }
}